/* 
 *	Copyright (C) 2009-2010 miaohua
 *	http://code.google.com/p/lrcshower/
 *
 *  This Program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *   
 *  This Program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *   
 *  You should have received a copy of the GNU General Public License
 *  along with GNU Make; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
 *  http://www.gnu.org/copyleft/gpl.html
 *
 */

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the LRCSHOWFILTER_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// LRCSHOWFILTER_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef LRCSHOWFILTER_EXPORTS
#define LRCSHOWFILTER_API __declspec(dllexport)
#else
#define LRCSHOWFILTER_API __declspec(dllimport)
#endif


#ifdef __cplusplus
extern "C" {
#endif


//----------------------------------------------------------------------------
// IID_ILrcShowFilter's GUID
//
// {05CC5E40-A0BC-4339-9294-A3BA5C873066}
DEFINE_GUID(IID_ILrcShowFilter, 
0x5cc5e40, 0xa0bc, 0x4339, 0x92, 0x94, 0xa3, 0xba, 0x5c, 0x87, 0x30, 0x66);

//----------------------------------------------------------------------------

DECLARE_INTERFACE_(ILrcShowFilter, IUnknown)
{

    STDMETHOD(put_MediaType) (THIS_
    				  CMediaType *pmt      /* [in] */	// The media type selected
				 ) PURE;

    STDMETHOD(get_MediaType) (THIS_
    				  CMediaType **pmt     /* [out] */	// The media type selected
				 ) PURE;

    STDMETHOD(get_IPin) (THIS_
    				  IPin **pPin          /* [out] */	// The source pin
				 ) PURE;


    STDMETHOD(get_State) (THIS_
    				  FILTER_STATE *state  /* [out] */	// The filter state
				 ) PURE;

    STDMETHOD(SetShowMode) (THIS_
                      bool Mode            /* [in] */   // Show mode, 0 : window mode; 1 : desktop mode
                 ) PURE;
    // Set the lrc show window's handler
    STDMETHOD(SetWinShowWnd) (THIS_
    				  HWND Handler         /* [in] */	// The lrc show window's handler
				 ) PURE;
        
    // Set the lrc file's full path
    STDMETHOD(SetWinLrcFile) (THIS_
    				  const TCHAR * FullPath/* [in] */	// The lrc file's full path
				 ) PURE;
        
    // Set the media file's duration
    STDMETHOD(SetDuration) (THIS_
    				  long long Duration   /* [in] */	// Media file's duration
				 ) PURE;

    // Set alignment(center, left, right) for window lrc show
    STDMETHOD(SetWinAlignmentOpt) (THIS_
    				  int Option           /* [in] */	//  Alignment(0: center; 1: left; 2: right)
				 ) PURE;

    // Set karaoke mode for window lrc show
    STDMETHOD(SetWinKaraokeMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set karaoke mode
				 ) PURE;
	
    // Set gradient color changing mode for window lrc show
    STDMETHOD(SetWinGradientMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set gradient mode
				 ) PURE;

	// Set auto resize mode for window lrc show
    STDMETHOD(SetWinAutoResizeMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set auto resize mode
				 ) PURE;

	// Set topmost mode for window lrc show
    STDMETHOD(SetWinTopMostMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set topmost mode
				 ) PURE;

    // Set font for windows lrc show
    STDMETHOD(SetWinFont) (THIS_
		              const LOGFONT* font  /* [in] */   //  The window lrc text font
				 ) PURE;

	// Funtions for color changement
	// Set the window lrc show's background color
    STDMETHOD(SetWinBgClr) (THIS_
		              COLORREF Clr         /* [in] */  //  The new background color
				 ) PURE;

	// Set the focus line lrc's color
	STDMETHOD(SetWinFocusClr) (THIS_
		              COLORREF Clr         /* [in] */  //  The new focus line color
				 ) PURE;

    // Set the other line lrc's color
	STDMETHOD(SetWinUnFocusClr) (THIS_
		              COLORREF Clr         /* [in] */  //  The new focus line color
				 ) PURE;

    // Set lrc line's vertical interval for window lrc show
	STDMETHOD(SetWinLineInterval) (THIS_
		              int Interval         /* [in] */  //  The new line vertical interval
				 ) PURE;

    // Set the lrc show window's handler for desktop lrc show
    STDMETHOD(SetDeskShowWnd) (THIS_
    				  HWND Handler         /* [in] */	// The lrc show window's handler
				 ) PURE;

    // Set the desktop lrc file's full path
    STDMETHOD(SetDeskLrcFile) (THIS_
    				  const TCHAR * FullPath /* [in] */	// The lrc file's full path
				 ) PURE;

  	// Set the desktop lrc show's background color
    STDMETHOD(SetDeskBgClr) (THIS_
		              COLORREF Clr            /* [in] */  //  The new background color
				 ) PURE;

    // Set foucs part color for desktop show mode
	STDMETHOD(SetDeskFocusClr) (THIS_
		              COLORREF Upper,         /* [in] */  //  The new color for focus line's upper part
                      COLORREF Mid,           /* [in] */  //  The new color for focus line's middle part
                      COLORREF Lower          /* [in] */  //  The new color for focus line's lower part
				 ) PURE;

    // Set unfoucs part color for desktop show mode
	STDMETHOD(SetDeskUnFocusClr) (THIS_
		              COLORREF Upper,         /* [in] */  //  The new color for unfocus line's upper part
                      COLORREF Mid,           /* [in] */  //  The new color for unfocus line's middle part
                      COLORREF Lower          /* [in] */  //  The new color for unfocus line's lower part
				 ) PURE;

    // Set desktop show mode background transparent
	STDMETHOD(SetDeskBgTransparent) (THIS_
		              BYTE Transparent         /* [in] */  //  The new background transparent
				 ) PURE;

    // Set desktop show mode lrc word transparent
	STDMETHOD(SetDeskLrcTransparent) (THIS_
		              BYTE Transparent         /* [in] */  //  The new lrc transparent
				 ) PURE;

	// Set karaoke mode for desktop lrc show
    STDMETHOD(SetDeskKaraokeMode) (THIS_
    				  bool Mode                /* [in] */  //  Wether to set karaoke mode
				 ) PURE;

    // Set shadow mode for desktop lrc show
    STDMETHOD(SetDeskShadowMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set shadow mode
				 ) PURE;
	
    // Set outline mode for desktop lrc show
    STDMETHOD(SetDeskOutlineMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set outline mode
				 ) PURE;
    
    // Set topmost mode for desktop lrc show
    STDMETHOD(SetDeskTopMostMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set topmost mode
				 ) PURE;

    // Set transparence mode for desktop lrc show window
    STDMETHOD(SetDeskTransMode) (THIS_
    				  bool Mode            /* [in] */	//  Wether to set topmost mode
				 ) PURE;

    // Set font for desktop lrc show
    STDMETHOD(SetDeskFont) (THIS_
		              const LOGFONT* font     /* [in] */  //  The desktop lrc show font
				 ) PURE;

	// Start the window lrc show
	STDMETHOD(StartWinShow) () PURE;          /* no [in] */ // Start the lrc shower(window mode)

	// Stop the window lrc show
	STDMETHOD(StopWinShow) () PURE;           /* no [in] */ // Stop the lrc shower(window mode)

  	// Start the desktop show
	STDMETHOD(StartDesktopShow) () PURE;      /* no [in] */ // Start the lrc shower(desktop mode)

  	// Stop the desktop show
	STDMETHOD(StopDesktopShow) () PURE;       /* no [in] */ // Stop the lrc shower(desktop mode)

    // Change show mode to desktop lrc show
    STDMETHOD(ChgToDeskShow)() PURE;
     
    // Change desktop mode to window lrc show
    STDMETHOD(ChgToWinShow)() PURE;

    // Reload lrc file for desktop lrc show
    STDMETHOD(ReloadDeskLrcFile)(THIS_
                      const TCHAR * FullPath        /* [in]  */  // Lrc file's full path   
                 ) PURE;

    // Reload lrc file for window lrc show
    STDMETHOD(ReloadWinLrcFile)(THIS_
                      const TCHAR * FullPath       /* [in]  */  // Lrc file's full path   
                 ) PURE;
};


#ifdef __cplusplus
}
#endif


